//对象是保存内存地址而不是值
//当对象的值发生变化时，如果有别的对象指向相同地址也会变。
var a={name:"kevin",height:95,d:{d:"dd"}};//a指向一个内存地址
var b=a;//这里，b指向a指向的内存地址
var c={name:"henry",height:30};
var d={d:"新对象"}
a.name="开什么玩笑";//这里会影响b的值
a.d=d;
d={};//这里不会影响b指向的d值
a={name:"kevin"};
a.name="nick";
//a=c;//这里，a已经指向新的内存地址，不会影响b
//console.log(a,b,c);
{
    let c={name:"kevin"};
    let a={c:c};
    let b=a;
    a=a.c;
    a.name="henry";
    console.log(a,b,c);
}


//1.当const对象时，里面的值可以变
{const test={a:"a"};
test.a="b";
console.log(test);//{a:b}
}

//2.如何让对象的值不被修改
{const test={a:"a"};
Object.freeze(test);//冻结test,不让别人修改对象里的值
test.a="b";
console.log(test);//{a:a}
}

//3.如何让对象里的某个属性不让修改
{
    var obj = {};
    Object.defineProperty( obj, "<属性名>", {
      value: "<属性值>",
      writable: false,//是否可写
      enumerable: true,//是否可通过for...in循环
      configurable: true//是否能删除delete，是否能重新配置defineProperty
    });
}
